<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    //（一）数字number。
    var one = 1;
    typeof one;//返回值是number
    var one1 = one  *  '此处为字符串';
    console.log(one1);//NaN。这是一个特殊的数字类型，连它自己都不等于自己。有它参与的运算也会被传染
    var one2 = one1 + 1 + 2;
    console.log(one2);//NaN

    //（二）字符串
    var two = '';
    console.log(typeof  two);//string 空字符串也是string类型
    //（1、1）字符串转换为其他数据类型
    //（1、1-1）乘法带来的转换
    var two1 = '1';
        two1 = two1*3;//3;类型是number
    //(1、1-2)自增自减带来的转换
    var two2 = '2';
        two++;//2;类型是number
    //（1、2）其他类型转换为字符串

    //使用字符串拼接的方式
    var n = 1;
    var z = n + '';
    typeof  z;//string类型

    //（1、3）特殊字符串
    //转义字符串；此处举例有\\   \'  \''
    var s = " 1\\2";//1\2
    var s = 'i don\"t know';//i don"t know
    console.log(s);
    var s = "i don\" know";//i don"t know
    console.log(s);
    //换行符\n
    //回车符\r
    //制表符\t(js中表示在水平方向跳到下个tab位置；姑且理解为插入一个tab吧)
    var t = '1\t2';
    console.log(t);//1  2
    //\u；会将这个字符后面的代码视为Unicode码
    "\u0421"//控制台会输出"С"
    //（三）布尔值
    var b = true;
    typeof b;//"boolean"
    //双重取反，能够轻易将任何值转换为相应的布尔值
    var c = 'one';
    !!c;//true
    //双重取反，会得到false的几个（
    //（1）空字符串“”（2）null（3）undefined（4）数字0 (5)NaN (6)布尔值false
    // ）

    //短路操作。谁决定了最终的结果，表达式返回值就是谁
    var sky = true || 'mao';//true;
    var moon = true && 'mao';//'mao'

    //变量是否已经定义的判断，否则初始化赋值。
    var mystart = mystart || 10;//此处如果mystart已经有值，则会拿到该值。如果没有会变成10

    //(四)undefined
    //4、1当尝试使用一个不存在的变量时，控制台就会产生以下错误信息
    >foo;
    //ReferenceError: foo is not defined;
    //但是如果使用type of操作符时，不会出现这样的错误。
    >typeof foo;//"undefined"

    //当我们声明了一个变量，而且不进行赋值的话，那么js会自动将undefined初始化给这个变量。
    >var somevar;
    >somevar === undefined;
    >true

    //(五)null
    //参见第四个，我们能够发现，null和undefined的机制是不同的。null是不会被js自动去初始化的
    //必须由我们手动来赋值
    var somevar = null;//返回值是null
    typeof  somevar;//返回值是“object”


    //我们来总结下undefined和null之间的差别
    >var i = 1 + undefined;
    >i;
    NaN;

    >var i = 1 + null;
    >i;
    1;

    //原因是：null和undefined转换为其他基本类型的时候，存在很多差异。
    //(1)转换为数字
    >1*undefined;
    >NaN;

    >1*null;
    >0;
    //(2)转换为布尔值
    >!!undefined;//false
    >!!null;//false
    //(3)转换为字符串
    >"value:" + null;
    "value:null";

    >"value:" + undefined;
    >'value:undefined';



</script>
</body>
</html>